
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

//SGD Wrappers
class CSGD_Direct3D;
class CSGD_DirectInput;
class CSGD_TextureManager;
class CSGD_XAudio2;

//Managers
class TileManager;

class CBitmapFont;
class State;

class Game
{
public:
	static Game* GetInstance(void);
	void Initialize(HWND hWnd, HINSTANCE hInstance, int nWidth, int nHeight, bool bWindowed);
	bool Main(void);
	void Terminate(void);
	int	 GetScreenWidth	 (void) const { return m_nScreenWidth;  }
	int	 GetScreenHeight (void) const { return m_nScreenHeight; }
	bool GetIsWindowed	 (void) const { return m_bIsWindowed;   }
	CBitmapFont* GetFont (void) const {	return m_pBF;           }
	void ChangeState(State* pNewState);

private:
	Game(void);
	~Game(void);
	Game(const Game&);
	Game& operator= (const Game&);
	bool Input(void);
	void Update(void);
	void Render(void);

	CBitmapFont*	m_pBF;
	State*			m_pCurrState;
	int				m_nScreenWidth;
	int				m_nScreenHeight;
	bool			m_bIsWindowed;
	DWORD			m_dwCurrTime;
	unsigned int	m_unFPS;
	unsigned int	m_unFrames;
	float			m_fFPSTimer;
	int				backgroundImageID;
	int				musicID;

	//SGD Wrappers
	CSGD_Direct3D*			m_pD3D;
	CSGD_DirectInput*		m_pDI;
	CSGD_TextureManager*	m_pTM;
	CSGD_XAudio2*			m_pXA;

	//Managers
	TileManager*			m_pTiM;

};
